<script>
import {defineComponent} from 'vue'
// 引入Header组件
import Header from "@/components/Header.vue";

// 引入Main组件
import Main from "@/components/Main.vue";

// 引入Footer组件
import Footer from "@/components/Footer.vue";

export default defineComponent({
  // name属性：用于显式声明组件展示时的名称。
  name: "App",
  //data函数：用于声明组件初始响应式状态的函数(必须return一个新对象)
  data() {
    return {
      componentName: "Header",
      person: {
        name: "陶品奇",
        age: 22,
        address: "湖南省"
      }
    }
  },
  // methods:用于声明要混入到组件实例中的方法
  methods: {
    handler(componentName) {
      this.componentName = componentName
    },
    clickHandle(value) {
      console.log(value)
    },
  },
  // components：一个对象，用于注册对当前组件实例可用的组件
  components: {
    Header,
    Main,
    Footer
  },
})
</script>

<template>
  <div class="app">
    <button @click="handler('Header')">Header</button>
    <button @click="handler('Main')">Main</button>
    <button @click="handler('Footer')">Footer</button>
    <!--component是动态组件，当is属性匹配到了相应的组件名就会显示对应的组件-->
    <!--在使用component动态组件的时候也可以传递props和绑定自定义事件对应的组件接收props和触发事件即可-->
    <component :is="componentName" :person="person" @clickHandle="clickHandle"></component>
  </div>
</template>

<style lang="less">

</style>
